//import java.util.Scanner;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        while(true) {
//            long n = scanner.nextLong();
//            if(n == 0) break;
//            int ret = f(n);
//            System.out.println(ret);
//        }
//    }
//    public static int f(long n) {
//        if(n <= 1) return 0;
//        if(n == 2) return 1;
//        if(n % 3 == 0) {
//            return f(n/3) + 1;
//        }else {
//            return f(n/3+1) +1;
//        }
//    }
//}

import java.util.*;
class Solution {
    /**
     *	正数数组中的最小不可组成和
     *	输入：正数数组arr
     *	返回：正数数组中的最小不可组成和
     */
    HashSet<Integer> set = new HashSet<>();
    int n;
    List<Integer> list = new ArrayList<>();
    public void dfs(int[] arr,int u) {
        int sum =0;
        if(u == n) {
            for(int x:list) {
                sum += x;
                //System.out.print(x+" ");
            }
            //System.out.println();
            System.out.println(sum);
            set.add(sum);
            return ;
        }
        //选
        list.add(arr[u]);
        dfs(arr,u+1);
        list.remove(list.size()-1);
        //不选
        dfs(arr,u+1);
    }
    public int getFirstUnFormedNum(int[] arr) {
        n = arr.length;
        dfs(arr,0);
        Arrays.sort(arr);
        int min = arr[0];
        int max = 0;
        for(int x:arr) max += x;
        for(int i = min; i<=max; i++) {
            if(!set.contains(i)) return i;
        }
        return max+1;
    }
}

public class Main {
    public static void main(String[] args) {
        int[] nums = {3,1,2};
        int ret = new Solution().getFirstUnFormedNum(nums);
        System.out.println(ret);
    }
}
